<?

class ClienteEstado {
	
	function __construct () {
		
	}

	function modificar () {
		return "se modifico";
	}

}

class Cliente {
	
	function __construct () {
	}
	
	/**
	 * Instancia un objeto del tipo solicitado para poder ejecutar los metodos del mismo.
	 * Captura el acceso a una variable inexistente, instancia esta misma clase seteando el tipo 
	 * de objeto de que se trata y retorna.
	 * 
	 * @param string $class Nombre de la variable que se solicito y no existe
	 * @return string
	 */
	public function __get ($class) {
		$thisclass = __CLASS__.$class;
		$this->{strtolower($class)} = new $thisclass();
var_dump($this->{strtolower($class)});
	}

	public function __call ($function, $params) {
		return $this->call($function, $params);
	}

	function estado () {
		return "nuevo<br />";
	}

}

$Cliente = new Cliente();

echo $Cliente->estado();

echo $Cliente->estado->modificar();



?>
